# 没有 对应的键 ，则会抛出错误
dict1 = {1:'a', 'b':2}
# print(dict1[2])
# KeyError: 2

# 删除操作
# del dict1['b']; print(dict1)    # {1: 'a'}
# dict1.clear();  print(dict1)    # {}
# del dict1

# key重复
# 相当于修改了
dict1['b']=False
print(dict1)

# key只要是不可变的即可，比如元组
dict1[1, 2, 3] = [4, 5, 6]
# 这很神奇 TypeError: unhashable type: 'list' 
# dict1[ ([1,2,3],) ] = [4,5,6]
# 所以说，整个key 都必须是可hash的
print(dict1)

dict2 = {
    'a': 123,
    'b': 456,
    'c': 789
}
# zip: 将多个可迭代 打包成 元组，返回1个可迭代
print(zip(dict2.keys(), dict2.values()))        # <zip object at 0x000001C944AC1F00>
print(max(zip(dict2.keys(), dict2.values())))   # ('c', 789)

# 像 keys() values() 返回的 可迭代结构，不是list
# 可以转成list
print(dict2.keys(), list(dict2.keys()))
# dict_keys(['a', 'b', 'c']) ['a', 'b', 'c']

# 有意思的，dict迭代的 是可索引的
# 所以这样是可行的 value -> index -> key

# api: dict.fromkeys() 这里的value 并非是克隆的，即 引用同一个
dict3 = {}.fromkeys([1,2,3], [])
print([ id(x) for x in dict3.values() ])
# [1280152305344, 1280152305344, 1280152305344]
dict3 = { x:[] for x in [1,2,3] }
print([ id(x) for x in dict3.values() ])
# [1231191684608, 1231191686912, 1231191671872]
# .copy() 